#include <iostream>
#include <vector>
#include "../../lib/algo/Travail.h"
#include "../../lib/algo/Machine.h"
#include "../../lib/algo/Graham.h"
#include "../../lib/algo/Steinberg.h"
#include "../../lib/algo/Sjf.h"
#include "../../lib/algo/Ljf.h"

using namespace std;



int main(int argc, char *argv[])
{
  	std::cout<<"\n**************\n\n";

//----------------------------------------------
//********* declaration des variables **********
//----------------------------------------------
	int k = 9;
	vector<Travail> vTravail;
	vector<Machine> vMachine;

//----------------------------------------------
//***************** Body ***********************
//----------------------------------------------

// elements Travail:
	Travail travail;
	travail.setIdTravail(0);
	travail.setDuree1(30);
	travail.setNbrMachine(3);
	vTravail.push_back(travail);

//	Travail travail;
	travail.setIdTravail(1);
	travail.setDuree1(45);
	travail.setNbrMachine(4);
	vTravail.push_back(travail);

//	Travail travail;
	travail.setIdTravail(2);
	travail.setDuree1(293);
	travail.setNbrMachine(1);
	vTravail.push_back(travail);

//	Travail travail;
	travail.setIdTravail(3);
	travail.setDuree1(78);
	travail.setNbrMachine(8);
	vTravail.push_back(travail);

//	Travail travail;
	travail.setIdTravail(4);
	travail.setDuree1(111);
	travail.setNbrMachine(6);
	vTravail.push_back(travail);

//	Travail travail;
	travail.setIdTravail(5);
	travail.setDuree1(55);
	travail.setNbrMachine(3);
	vTravail.push_back(travail);

//	Travail travail;
	travail.setIdTravail(6);
	travail.setDuree1(360);
	travail.setNbrMachine(8);
	vTravail.push_back(travail);

//	Travail travail;
	travail.setIdTravail(7);
	travail.setDuree1(83);
	travail.setNbrMachine(5);
	vTravail.push_back(travail);

//***********************************************
//----------------------------------------------
// creer le Vector des Machines :: 9 machines
//----------------------------------------------
	for (int j = 0; j < 10; j++){
		Machine machine;
		machine.setIpMachine(192+1);
		machine.setCPU(150+35);

		vMachine.push_back(machine);
	}

//	for (int i = 0; i < vTravail.size(); i++){
//		cout<< "element ID - " << vTravail[i].getIdTravail() <<endl;
//		cout<< "element Duree - " << vTravail[i].getDateDebut() <<endl;
//		cout<< "Machines - " << vTravail[i].getNbrMachine() <<endl;	
//	}


//	cout<<"Id ---- " << travail.getIdTravail() << " ----" <<endl;
//	cout<<"Duree1 ---- " << travail.getDuree1() << " ----" <<endl;

// appliquer l'algorithme SJF sur la liste des travaux :
//	Sjf sjf;
//	sjf.applySjf(vTravail);

// appliquer l'algorithme LJF sur la liste des travaux :
//	Ljf ljf;
//	ljf.applyLjf(vTravail);

// appliquer l'heuristique Graham 66 sur la liste des travaux :
	Graham gr;
	gr.applyGraham(vTravail);

// appliquer l'heuristique Steinberg sur la liste des travaux :
//	Steinberg steinb;
//	steinb.applySteinberg(vTravail);

  	std::cout<<"\n**************\n\n";

  return 0;
}

